package com.liruo.treasureattic.service.url.service;

import com.liruo.treasureattic.common.model.dto.url.HtmlUrlImportReq;
import com.liruo.treasureattic.common.model.dto.url.UrlBatchUpdateOrDelReq;
import com.liruo.treasureattic.common.model.dto.url.UrlQueryOneLevelReq;
import com.liruo.treasureattic.common.model.entity.TreasureUrl;
import com.liruo.treasureattic.common.model.entity.UrlFolder;
import com.liruo.treasureattic.common.model.vo.url.UrlFolderVo;
import com.liruo.treasureattic.common.model.vo.url.UrlQueryVo;

import java.util.List;

/**
 * @Author:liruo
 * @Date:2023-02-09-20:24:54
 * @Desc
 */
public interface UrlAndFolderService {
    /**
     * 在mysql保存urlFolders和treasureUrls
     *  注意这个方法并没有对folder和url校验，仅仅校验name和url的长度, 而是直接保存，   比如用在导入数据上
     */
    void saveOrUpdateAll(List<UrlFolder> urlFolders, List<TreasureUrl> treasureUrls);

    /**
     * 一层级查询
     *  folderId==null ---查询默认folder
     * @return folder的子folder以及folder的url
     */
    UrlQueryVo queryOneLevel(UrlQueryOneLevelReq urlQueryOneLevelReq);


    /**
     *  解析的rootFolder是一个总folder
     *        浏览器工具栏上的书签目录以及书签在一个叫toolbar的folder里,toolbar在rootFolder中
     *       其他书签就直接在rootFolder下
     *
     *     TO_DEFAULT_FOLDER(0,"把解析结果直接放到默认folder下")
     *          返回rootFolder
     *     TO_NEW_FOLDER(1,"把解析结果直接放到新建的folder下")
     *          返回新建的folder， 把rootFolder设置为urlFolderAddReq的name和open和fid
     *     以上2个使用collectUrlAndFolder进行对folder的id的抢占，因此最后使用update而不是save
     *
     *     SELF_ADJUST(2,"- 进行自我调整(把上传的与当前的进行重组)后再重新上传保存-结果返回后，前端应该再请求所有folder，这些folder会有点击就查询url的功能"),
     *          返回导入的folder和url视图，folder和url使用的都是临时的id(使用id生成器生成的)，在SELF_ADJUST_REUPLOAD时会设为null进行保存
     *     SELF_ADJUST_REUPLOAD(3, "自我调整的重新上传变化后的father关系的folder和url保存")
     *          删除了临时id，返回导入的数据 按数据库的id降序拿size个
     *         1. 需要把folder和url的假id删除
     *         2. 重新上传的包括本就有的和导入的，都存在被修改和被删除的情况，而且导入的被删除前端不会加入
     *
     *     3次保存都用saveOrUpdateAll，前2个是更新，第三个是保存
     */
    List<UrlFolderVo> importUrlByHtml(HtmlUrlImportReq htmlUrlImportReq);


    /**
     * 删除folder以及子folder和url
     *      删folder，删rul，找子folder
     */
    void delFolder(long folderId);

    /**
     *  不会与旧数据对比
     */
    void batchDelUrlFolder(List<Long> deleteFolderIds);
    /**
     * 不会与旧数据对比
     */
    void batchUpdateOrDel(UrlBatchUpdateOrDelReq urlBatchUpdateOrDelReq);


    //回收站
//    List<UrlFolderVo> queryFolderInDustbin(List<Long> delCancelId);
//    List<UrlFolderVo> recoverFolders(List<Long> delCancelId);
//    List<UrlFolderVo> recoverUrls(List<Long> delCancelId);
}
